package com.ztgf.file.utils;

import com.alibaba.fastjson.JSON;
import com.ztgf.file.models.dto.FileInfoDTO;
import javafx.beans.property.Property;

import java.awt.*;
import java.lang.reflect.Field;

/**
 * 4.1 toHexString:没啥好说的，JDK提供的将整数转为16进制字符串。
 *
 * 4.2 number & 0xff : 确保int类型数据只有后8位是有效的，高24位都是无效的（都是0），int类型是32位，但是颜色值最大就是255，只需要8位就可以满足需求，因此就要确保传入的数据是合法的颜色值，而大于255的数据就要当作255处理，此时有两种办法，第一种就是本文这种处理方法，第二种就是加入判断，如果数据大于255，那么就等于255，如果小于则不处理。相比较而言，本文处理方法是代码最少的处理方法并且效率高。
 *
 * 4.3 &：按位“与”操作，如果二进制码同位都是1，那么结果就是1，否则就是0。
 *
 * 4.4 0xff: 0x代表它后面的是十六进制的数字;f就是15，转为2进制就是1111,2个f则是1111 1111（10进制的255），前面24位都是0，此时进行与操作，就确保了只有0——255范围内的int值是有效颜色值。
 */
public class ColorUtils {

    public static void main(String[] args) {
        Color color = String2Color("#FFF0F5");
        String hexString = toHexFromColor(color);
        System.out.println("16进制字符串:" + hexString);
//        Color color = fromStrToARGB("#FF00000");
        System.out.println("16进制字符串转为颜色的ARGB值:("+ color.getAlpha() +","+ color.getRed() +","
                + color.getGreen() +","+ color.getBlue() +")");

        Object obj = new FileInfoDTO();
        Class clas = obj.getClass();
        Field[] fields = clas.getDeclaredFields();
        String fileUrl = "123123";
        for (Field field : fields) {
            if(field.getName().equals("fileUrl")){
                try{

                    field.setAccessible(true);
                    field.set(obj, fileUrl);
                    System.out.println("--------"+field.get(obj));
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }

        System.out.println(JSON.toJSONString(obj));
    }

    public static Color String2Color(String str) {
        int i = Integer.parseInt(str.substring(1), 16);
        return new Color(i);
    }

    /**
     * Color对象转换成字符串
     * @param color Color对象
     * @return 16进制颜色字符串
     * */
    private static String toHexFromColor(Color color){
        String r,g,b;
        StringBuilder su = new StringBuilder();
        r = Integer.toHexString(color.getRed());
        g = Integer.toHexString(color.getGreen());
        b = Integer.toHexString(color.getBlue());
        r = r.length() == 1 ? "0" + r : r;
        g = g.length() ==1 ? "0" +g : g;
        b = b.length() == 1 ? "0" + b : b;
        r = r.toUpperCase();
        g = g.toUpperCase();
        b = b.toUpperCase();
//        su.append("0xFF");
        su.append("#");
        su.append(r);
        su.append(g);
        su.append(b);
        //0xFF0000FF
        return su.toString();
    }

}
